/*
  Programa GEFE - Gestión de eventos lúdicos.
  Copyright (C) 2010  Antonio Ramírez Marti

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef REPORTEACTIVIDADES_H
#define REPORTEACTIVIDADES_H

#include <QObject>
#include <QTextDocument>
#include <QTextBlock>
#include <QTextCursor>

#include <dialogreport.h>

/*!
  Genera un reporte de actividades dependiendo del modelo que elijamos
  */

class ReporteActividades : public QObject
{
Q_OBJECT
Q_PROPERTY (QTextDocument * reporte READ getReporte)
Q_ENUMS (Modo)
Q_ENUMS (Formato)

public:
    explicit ReporteActividades(QObject *parent = 0);

    /*!
      Devuelve el último reporte generado
      */

    QTextDocument *getReporte() const;

    /*!
      Modos de actuacion
      */

    enum Modo
    { Dialogo,SinDialogo };

    /*!
      Formatos de salida
      */

    enum Formato
    { PDF, ODT };

signals:

public slots:

    /*!
      Genera un reporte general directamente a un archivo
      @param formato    Formato de salida del archivo
      */

    void reporteGeneral(Formato form=ODT);

    /*!
      Genera un reporte por tipos
      */

    void reportePorTipos();

    /*!
      Genera un reporte por salas
      */

    void reportePorSalas();

    /*!
      Genera un reporte por días
      */

    void reportePorDias();

    /*!
      Genera un reporte por asociaciones
      */

    void reportePorAsociaciones();


    /*!
      Limpia el documento
      */

    void clean();

private:

    QTextDocument *reporte;     ///< Reporte generado
    QTextCursor *cursor;        ///< Cursor de escritura

    /*!
      Prepara la clase para trabajar
      */

    void setup();

    /*!
      Presenta un dialogo con el reporte
      */

    void presentaDialog();

    /*!
      Escribe en el documento los datos generales del evento
      */

    void writeDatosGenerales();

};

#endif // REPORTEACTIVIDADES_H
